package br.com.designless.view.servlet;

import br.com.designless.business.facade.FutibaManagerFacadeRemote;
import br.com.designless.exception.UsuarioExistenteException;
import br.com.designless.exception.UsuarioNaoEncontradoException;
import br.com.designless.view.helper.UsuarioHelper;
import java.io.IOException;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.designless.business.model.Usuarios;
import br.com.designless.view.Util.Util;

/**
 *
 * @author diogenes.feijo
 */
public class UsuarioServlet extends HttpServlet {

    @EJB
    private FutibaManagerFacadeRemote futibaManagerFacade;

    private UsuarioHelper usuarioHelper = new UsuarioHelper();

    private void processarRequisicao(HttpServletRequest request,
                                     HttpServletResponse response) throws ServletException,
                                                                          IOException {

        String acao = request.getParameter("acao");
        String forward = UsuarioHelper.FORWARD_INICIO;

        if (UsuarioHelper.ACAO_NOVO_USUARIO.equals(acao)) {
            Usuarios usuario = usuarioHelper.carregarUsuarioJogador(request);

            request.setAttribute("cadastroUsuario", usuario);

            if (!usuarioHelper.validarCadastroUsuario(request, response, usuario)) {
                return;
            }

            try {
                usuario = futibaManagerFacade.cadastrarUsuario(usuario);

                usuarioHelper.logarUsuario(request, usuario);

                forward = UsuarioHelper.FORWARD_JOGOS;
            } catch (UsuarioExistenteException ex) {
                Util.mostrarMensagemErro(request, response, UsuarioHelper.FORWARD_CADASTRO_USUARIO, ex.getMessage());

                return;
            }

            Util.mostrarMensagemSucesso(request, "Usuário cadastrado com sucesso");

            request.removeAttribute("cadastroUsuario");
        } else if (UsuarioHelper.ACAO_LOGIN.equals(acao)) {
            try {
                String login = request.getParameter("nomeUsuario");
                String senha = request.getParameter("senhaUsuario");

                if (usuarioHelper.validarLoginUsuario(login, senha)) {
                    Usuarios usuario = futibaManagerFacade.buscarUsuario(login, senha);

                    usuarioHelper.logarUsuario(request, usuario);

                    forward = UsuarioHelper.FORWARD_JOGOS;
                }
            } catch (UsuarioNaoEncontradoException ex) {
                Util.mostrarMensagemErro(request, response, UsuarioHelper.FORWARD_INICIO, ex.getMessage());

                return;
            }
        } else if (UsuarioHelper.ACAO_LOGOUT.equals(acao)) {
            usuarioHelper.logoutUsuario(request);
        } else if (UsuarioHelper.ACAO_RECUPERAR_DADOS_USUARIO.equals(acao)) {
            String emailUsuario = request.getParameter("emailUsuario");

            try {
                futibaManagerFacade.recuperarDadosCadastraisUsuario(emailUsuario);
            } catch (UsuarioNaoEncontradoException ex) {
                Util.mostrarMensagemErro(request, response, UsuarioHelper.FORWARD_INICIO, ex.getMessage());

                return;
            }

            Util.mostrarMensagemSucesso(request, "Seus dados cadastrais foram enviados por e-mail com sucesso");
        }

        Util.encaminharRequisicao(request, response, forward);
    }

    @Override
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response) throws ServletException, IOException {

        processarRequisicao(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, 
                          HttpServletResponse response) throws ServletException, IOException {

        processarRequisicao(request, response);
    }

}